#pragma once

#include "pe.h"

/****************************************************************************\
 * Image Headers (Implemented in printers_hdr.c).
\****************************************************************************/

void print_dos_header(pe_file *p_pe);
void print_pe_sig(pe_file *p_pe);
void print_file_header(pe_file *p_pe);
void print_optional_header(pe_file *p_pe);
void print_section_headers(pe_file *p_pe);
void print_nt_headers(pe_file *p_pe);

/****************************************************************************\
 * Metadata (Implemented in printers_md.c and printers_mdt.c).
\****************************************************************************/

void print_cli_header(pe_file *p_pe);
void print_md_storage_sig(pe_file *p_pe);
void print_md_storage_hdr(pe_file *p_pe);
void print_md_stream_hdrs(pe_file *p_pe);
void print_md_headers(pe_file *p_pe);

void print_md_strings(pe_file *p_pe, size_t n);
void print_md_us(pe_file *p_pe, size_t n);
void print_md_guid(pe_file *p_pe, size_t n);
void print_md_blob(pe_file *p_pe, size_t n);

void print_md_sn_signature(pe_file *p_pe);
void print_md_res(pe_file *p_pe, size_t start, size_t len);
void print_md_vtfixup(pe_file *p_pe, size_t start, size_t len);

void print_mdt_hdr(pe_file *p_pe);
void print_mdt_list(pe_file *p_pe, BOOL with_col);
void print_mdt_ct(pe_file *p_pe, BOOL with_rt);
void print_mdt_tbl(pe_file *p_pe, table_id tid,
	size_t start, size_t length, BOOL single_line);

/****************************************************************************\
 * IL (Implemented in printers_il.c).
\****************************************************************************/

void print_il_method(pe_file *p_pe, size_t rid_method, BOOL with_code);
void print_il_stream(byte *p_il, size_t len);
